//
//  PKDownLoad.m
//  PianKe
//
//  Created by lanou on 16/1/5.
//  Copyright © 2016年 KFC. All rights reserved.
//

#import "PKDownLoad.h"

@interface PKDownLoad ()<NSURLSessionDownloadDelegate>

@end

@implementation PKDownLoad


- (instancetype) initWithModel:(PKDetailModel *)model
{
    self = [super init];
    if (self) {
    
        // 初始化下载类 的时候 就 创建下载所需的NSURLSession,让session去执行一个下载任务,我们用一个DownLoadTask去保存这个下载任务,方便对它进行控制
        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        _session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:([NSOperationQueue mainQueue])];
        _downLoadTask = [_session downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:model.musicUrl]]];
        _downLoadModel = model;
        
         _isDownLoading = YES;   // 开始变成 : 正在下载
        
        _downloadState = -1;// 下载
        
        [_downLoadTask resume]; // 这边可以把下载写到外面,就可以在外面操纵开始下载
       
    }
    
    return self;
    
}


// 协议方法,必须实现
// 下载完成之后执行的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{
   
    _downloadState = 1; // 完成
    
    // 下载完成之后,把下载好的歌曲存到一张表里面,当访问已下载页面的时候可以从这个表里面读取数据,显示在已下载界面 (利用fmdb)
   
    
    
}


// 获取当前下载的进度和总进度
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    _downloadState = -1;
    
    // 获取当前下载的进度和总进度
    _totalBytesWritten = totalBytesWritten;
    _totalBytesExpectedToWrite = totalBytesExpectedToWrite;
    
    CGFloat f = _totalBytesWritten * 1.0 / _totalBytesExpectedToWrite;
    
    
    if (_totalBytesExpectedToWrite == _totalBytesWritten)
    {
        _downloadState = 1; //
    }
    
    _block([NSNumber numberWithFloat:f]);
    
    
}




// 暂停下载
- (void)pauseDownLoad
{
    [_downLoadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
        
        // 保存这个还没有下载完的data (用属性保存)
        _downloadState = 0;
        
        _tempData = resumeData;
        
        
        
    }];
    
    _isDownLoading = NO;  // 变成暂停下载
    
}


// 继续下载
- (void)goonDownLoad
{
    // data是暂停下载后保存下来的data
    _downLoadTask = [_session downloadTaskWithResumeData:_tempData];
    
        _downloadState = -1;
    [_downLoadTask resume];
    

    
    _isDownLoading = YES; // 变成正在下载
}



@end
